/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package econutri.persistencia.dao;

import econutri.persistencia.entidades.Alimento;
import econutri.persistencia.TransactionDAO;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Leonardo Oliveira Moreira
 */
public class AlimentoDAO {

    public Alimento getAlimento(Long codigo) {
        if (codigo == null) {
            return null;
        }
        Alimento alimento = new Alimento();
        TransactionDAO dao = new TransactionDAO();
        String sql = "select " +
                "codigo, descricao, quantidade, carboidrato, proteina, " +
                "lipidio, calcio, fosforo, ferro, sodio, vitaminaa, " +
                "vitaminab1, vitaminab2, niacina, vitaminac, fibra, " +
                "colesterol, preco from alimento where codigo = " + codigo;
        ResultSet rs = dao.executeQuery(sql);
        try {
            while (rs != null && rs.next()) {
                alimento.setCodigo(rs.getLong("codigo"));
                alimento.setDescricao(rs.getString("descricao"));
                alimento.setQuantidade(rs.getDouble("quantidade"));
                alimento.setCarboidrato(rs.getDouble("carboidrato"));
                alimento.setProteina(rs.getDouble("proteina"));
                alimento.setLipidio(rs.getDouble("lipidio"));
                alimento.setCalcio(rs.getDouble("calcio"));
                alimento.setFosforo(rs.getDouble("fosforo"));
                alimento.setFerro(rs.getDouble("ferro"));
                alimento.setSodio(rs.getDouble("sodio"));
                alimento.setVitaminaA(rs.getDouble("vitaminaa"));
                alimento.setVitaminaB1(rs.getDouble("vitaminab1"));
                alimento.setVitaminaB2(rs.getDouble("vitaminab2"));
                alimento.setNiacina(rs.getDouble("niacina"));
                alimento.setVitaminaC(rs.getDouble("vitaminac"));
                alimento.setFibra(rs.getDouble("fibra"));
                alimento.setColesterol(rs.getDouble("colesterol"));
                alimento.setPreco(rs.getDouble("preco"));
            }
        } catch (SQLException ex) {
            Logger.getLogger(AlimentoDAO.class.getName()).log(Level.SEVERE, null, ex);
            dao.rollback();
        }
        dao.commit();
        dao.close();
        return alimento;
    }

    public List<Alimento> getAlimentos() {
        List<Alimento> result = new ArrayList<Alimento>();
        TransactionDAO dao = new TransactionDAO();
        String sql = "select " +
                "codigo, descricao, quantidade, carboidrato, proteina, " +
                "lipidio, calcio, fosforo, ferro, sodio, vitaminaa, " +
                "vitaminab1, vitaminab2, niacina, vitaminac, fibra, " +
                "colesterol, preco from alimento";
        ResultSet rs = dao.executeQuery(sql);
        try {
            while (rs != null && rs.next()) {
                Alimento alimento = new Alimento();
                alimento.setCodigo(rs.getLong("codigo"));
                alimento.setDescricao(rs.getString("descricao"));
                alimento.setQuantidade(rs.getDouble("quantidade"));
                alimento.setCarboidrato(rs.getDouble("carboidrato"));
                alimento.setProteina(rs.getDouble("proteina"));
                alimento.setLipidio(rs.getDouble("lipidio"));
                alimento.setCalcio(rs.getDouble("calcio"));
                alimento.setFosforo(rs.getDouble("fosforo"));
                alimento.setFerro(rs.getDouble("ferro"));
                alimento.setSodio(rs.getDouble("sodio"));
                alimento.setVitaminaA(rs.getDouble("vitaminaa"));
                alimento.setVitaminaB1(rs.getDouble("vitaminab1"));
                alimento.setVitaminaB2(rs.getDouble("vitaminab2"));
                alimento.setNiacina(rs.getDouble("niacina"));
                alimento.setVitaminaC(rs.getDouble("vitaminac"));
                alimento.setFibra(rs.getDouble("fibra"));
                alimento.setColesterol(rs.getDouble("colesterol"));
                alimento.setPreco(rs.getDouble("preco"));
                result.add(alimento);
            }
        } catch (SQLException ex) {
            Logger.getLogger(AlimentoDAO.class.getName()).log(Level.SEVERE, null, ex);
            dao.rollback();
        }
        dao.commit();
        dao.close();
        return result;
    }

    public List<Alimento> getAlimentos(Long codigo, String descricao) {
        List<Alimento> result = new ArrayList<Alimento>();
        TransactionDAO dao = new TransactionDAO();
        String sql = "select " +
                "codigo, descricao, quantidade, carboidrato, proteina, " +
                "lipidio, calcio, fosforo, ferro, sodio, vitaminaa, " +
                "vitaminab1, vitaminab2, niacina, vitaminac, fibra, " +
                "colesterol, preco from alimento " +
                "where (-1 = " + codigo + " or codigo = " + codigo + ") and " +
                "descricao like '" + descricao + "'";
        ResultSet rs = dao.executeQuery(sql);
        try {
            while (rs != null && rs.next()) {
                Alimento alimento = new Alimento();
                alimento.setCodigo(rs.getLong("codigo"));
                alimento.setDescricao(rs.getString("descricao"));
                alimento.setQuantidade(rs.getDouble("quantidade"));
                alimento.setCarboidrato(rs.getDouble("carboidrato"));
                alimento.setProteina(rs.getDouble("proteina"));
                alimento.setLipidio(rs.getDouble("lipidio"));
                alimento.setCalcio(rs.getDouble("calcio"));
                alimento.setFosforo(rs.getDouble("fosforo"));
                alimento.setFerro(rs.getDouble("ferro"));
                alimento.setSodio(rs.getDouble("sodio"));
                alimento.setVitaminaA(rs.getDouble("vitaminaa"));
                alimento.setVitaminaB1(rs.getDouble("vitaminab1"));
                alimento.setVitaminaB2(rs.getDouble("vitaminab2"));
                alimento.setNiacina(rs.getDouble("niacina"));
                alimento.setVitaminaC(rs.getDouble("vitaminac"));
                alimento.setFibra(rs.getDouble("fibra"));
                alimento.setColesterol(rs.getDouble("colesterol"));
                alimento.setPreco(rs.getDouble("preco"));
                result.add(alimento);
            }
        } catch (SQLException ex) {
            Logger.getLogger(AlimentoDAO.class.getName()).log(Level.SEVERE, null, ex);
            dao.rollback();
        }
        dao.commit();
        dao.close();
        return result;
    }

    public boolean inserir(Alimento alimento) {
        if (alimento == null) {
            return false;
        }
        boolean result = false;
        String sql = "insert into alimento (" +
                "descricao, " +
                "quantidade, " +
                "carboidrato, " +
                "proteina, " +
                "lipidio, " +
                "calcio, " +
                "fosforo, " +
                "ferro, " +
                "sodio, " +
                "vitaminaa, " +
                "vitaminab1, " +
                "vitaminab2, " +
                "niacina, " +
                "vitaminac, " +
                "fibra, " +
                "colesterol, " +
                "preco" +
                ") values ('" +
                alimento.getDescricao() + "', '" +
                alimento.getQuantidade() + "', '" +
                alimento.getCarboidrato() + "', '" +
                alimento.getProteina() + "', '" +
                alimento.getLipidio() + "', '" +
                alimento.getCalcio() + "', '" +
                alimento.getFosforo() + "', '" +
                alimento.getFerro() + "', '" +
                alimento.getSodio() + "', '" +
                alimento.getVitaminaA() + "', '" +
                alimento.getVitaminaB1() + "', '" +
                alimento.getVitaminaB2() + "', '" +
                alimento.getNiacina() + "', '" +
                alimento.getVitaminaC() + "', '" +
                alimento.getFibra() + "', '" +
                alimento.getColesterol() + "', '" +
                alimento.getPreco() + "'" +
                ")";
        TransactionDAO dao = new TransactionDAO();
        result = dao.insert(sql);
        if (result)
            dao.commit();
        else
            dao.rollback();
        dao.close();
        return result;
    }

    public boolean atualizar(Alimento alimento) {
        if (alimento == null) {
            return false;
        }
        int sqlUpdate = 0;
        boolean result = false;
        String sql = "update alimento set " +
                "descricao = '" + alimento.getDescricao() + "', " +
                "quantidade = '" + alimento.getQuantidade() + "', " +
                "carboidrato = '" + alimento.getCarboidrato() + "', " +
                "proteina = '" + alimento.getProteina() + "', " +
                "lipidio = '" + alimento.getLipidio() + "', " +
                "calcio = '" + alimento.getCalcio() + "', " +
                "fosforo = '" + alimento.getFosforo() + "', " +
                "ferro = '" + alimento.getFerro() + "', " +
                "sodio = '" + alimento.getSodio() + "', " +
                "vitaminaa = '" + alimento.getVitaminaA() + "', " +
                "vitaminab1 = '" + alimento.getVitaminaB1() + "', " +
                "vitaminab2 = '" + alimento.getVitaminaB2() + "', " +
                "niacina = '" + alimento.getNiacina() + "', " +
                "vitaminac = '" + alimento.getVitaminaC() + "', " +
                "fibra = '" + alimento.getFibra() + "', " +
                "colesterol = '" + alimento.getColesterol() + "', " +
                "preco = '" + alimento.getPreco() + "' " +
                "where codigo = " + alimento.getCodigo();
        TransactionDAO dao = new TransactionDAO();
        sqlUpdate = dao.update(sql);
        result = (sqlUpdate > 0);
        if (result) {
            dao.commit();
        }
        else
            dao.rollback();
        dao.close();
        return result;
    }
    
}
